package com.ccom.core.common.util;

import com.google.common.collect.Lists;

import java.util.List;

/**
 * @Description: 集合工具类
 * @auther jjzhang24
 * @date 2021年12月13日 10:39
 */
public class CollectionUtils {

    private static final int DEFAULT_SIZE = 1000;

    /**
     * @param resList 原集合
     * @Description: 把一个集合拆分成多个集合
     * @Author: jjzhang24
     * @Date: 2021/12/13
     */
    public static <T> List<List<T>> split(List<T> resList) {
        return split(resList, DEFAULT_SIZE);
    }

    /**
     * @param resList       原集合
     * @param subListLength 拆分后集合的大小
     * @Description: 把一个集合拆分成多个集合
     * @Author: jjzhang24
     * @Date: 2021/12/13
     */
    public static <T> List<List<T>> split(List<T> resList, int subListLength) {
        if (EmptyUtils.isEmpty(resList) || subListLength <= 0) {
            return Lists.newArrayList();
        }
        List<List<T>> ret = Lists.newArrayList();
        int size = resList.size();
        if (size <= subListLength) {
            // 数据量不足 subListLength 指定的大小
            ret.add(resList);
        } else {
            int pre = size / subListLength;
            int last = size % subListLength;
            // 前面pre个集合，每个大小都是 subListLength 个元素
            for (int i = 0; i < pre; i++) {
                List<T> itemList = Lists.newArrayList();
                for (int j = 0; j < subListLength; j++) {
                    itemList.add(resList.get(i * subListLength + j));
                }
                ret.add(itemList);
            }
            // last的进行处理
            if (last > 0) {
                List<T> itemList = Lists.newArrayList();
                for (int i = 0; i < last; i++) {
                    itemList.add(resList.get(pre * subListLength + i));
                }
                ret.add(itemList);
            }
        }
        return ret;
    }
}
